﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Windows.Input;

namespace ScrumFactory.Composition.ViewModel {

    /// <summary>
    /// Sprint View Model interface.
    /// </summary>
    public interface ISprintViewModel {

        /// <summary>
        /// Gets the sprint.
        /// </summary>
        /// <value>The sprint.</value>
        Sprint Sprint { get; }

        /// <summary>
        /// Gets the planned items.        
        /// </summary>
        /// <value>The planned items as a collection view of BacklogItemDetailViewModels.</value>
        ICollectionView PlannedItems { get; }

        /// <summary>
        /// Gets the total hours of this Sprint.
        /// It includes all items planned at the Sprint, but the CANCELED ones.
        /// </summary>
        /// <value>The total hours.</value>
        decimal TotalHours { get; }

        /// <summary>
        /// Gets the number of members needed to finish the Sprint until
        /// its end date.        
        /// </summary>
        /// <value>The number of members needed to finish it.</value>
        double NumberOfMembersNeededForDoIt { get; }

        /// <summary>
        /// Gets the number of members needed to finish the Sprint until
        /// its end date, converted in Pixels to display the team member icons.
        /// </summary>
        /// <value>The number of members needed to finish it converted in pixels.</value>
        double NumberOfMembersNeededForDoItInPixels { get; }

        /// <summary>
        /// Refreshes the corresponding View of the View Model.
        /// </summary>
        void RefreshUI();


        /// <summary>
        /// Gets or sets the sprint start date.
        /// </summary>
        /// <value>The sprint start date.</value>
        DateTime SprintStartDate { get; set;  }


        /// <summary>
        /// Gets or sets the sprint end date.
        /// </summary>
        /// <value>The sprint end date.</value>
        DateTime SprintEndDate { get; set;  }

    }
}
